/**
 * 研发项目模型
 * 提供研发项目相关的常量定义和辅助方法
 */

class ResearchProjectModel {
  // 字段前缀
  static FIELD_PREFIX = 'PROJECT_';
  
  // 状态字段名称
  static STATUS_FIELD = 'PROJECT_STATUS';
  static SUB_STATUS_FIELD = 'PROJECT_SUB_STATUS';
  static ACTIVE_STATE_FIELD = 'PROJECT_ACTIVE_STATE';
  static ACTIVE_SUB_STATE_FIELD = 'PROJECT_ACTIVE_SUB_STATE';
  
  // 项目类型名称映射
  static PROJECT_TYPE_NAMES = {
    '电机控制类': '电机控制类',
    '磁编': '电机控制类',
    '霍尔': '电机控制类',
    '风机': '电机控制类',
    '水泵': '电机控制类',
    '电源类': '电源类',
    '传感器类': '传感器类',
    '其他类型': '其他类型'
  };

  /**
   * 一级状态定义
   */
  static LEVEL_1 = {
    APPROVAL: 1,      // 项目审核
    DORMANT: 2,       // 休眠状态
    ACTIVE: 3,        // 活动状态
    PAUSED: 4,        // 暂停状态
    POSTPONED: 5,     // 延期状态
    ON_HOLD: 6,       // 搁置状态
    COMPLETED: 99     // 已完成
  };

  /**
   * 一级状态名称
   */
  static LEVEL_1_NAMES = {
    1: '项目审核',
    2: '休眠状态',
    3: '活动状态',
    4: '暂停状态',
    5: '延期状态',
    6: '搁置状态',
    99: '已完成'
  };
  
  /**
   * 获取完整状态描述
   * @param {Object} project 项目对象
   * @returns {String} 状态描述
   */
  static getFullStatusDesc(project) {
    if (!project) return '未知状态';
    
    // 获取一级状态值
    const status = project[this.STATUS_FIELD];
    const subStatus = project[this.SUB_STATUS_FIELD];
    
    // 根据状态返回描述
    let statusDesc = this.LEVEL_1_NAMES[status] || '未知状态';
    
    // 如果有子状态信息，可以添加
    if (subStatus) {
      statusDesc += ` - ${subStatus}`;
    }
    
    return statusDesc;
  }
  
  /**
   * 获取项目类型名称
   * @param {String} type 项目类型
   * @returns {String} 项目类型名称
   */
  static getProjectTypeName(type) {
    return this.PROJECT_TYPE_NAMES[type] || type;
  }
  
  /**
   * 获取分类名称
   * @param {Number|String} cate 分类代码
   * @returns {String} 分类名称
   */
  static getCateName(cate) {
    const cateMap = {
      0: '电机控制类',
      1: '霍尔类',
      2: '磁编类',
      3: '工控类',
      4: '其他类型'
    };
    
    if (typeof cate === 'string' && !isNaN(cate)) {
      cate = parseInt(cate);
    }
    
    return cateMap[cate] || '未知分类';
  }
  
  /**
   * 获取优先级名称
   * @param {Number|String} priority 优先级代码
   * @returns {String} 优先级名称
   */
  static getPriorityName(priority) {
    const priorityMap = {
      'low': '低',
      'normal': '中',
      'high': '高',
      'urgent': '紧急',
      0: '低',
      1: '中',
      2: '高',
      3: '紧急'
    };
    
    return priorityMap[priority] || '中';
  }
}

module.exports = ResearchProjectModel; 